// 这是一个触发按钮的实例，其有被按下和释放两种状态，特点是被按下后并不会被释放
// 触发按钮的使用方法和普通按钮基本相同，只是其多了一个触发事件（信号）toggled，下面为触发按钮的实例，
// 在其中可以看到有“被按下”和“释放弹起”两种不同的状态
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <string.h>

void button_deal(GtkWidget *widget, gpointer *data){
	// 输出按键的状态
	g_print("Button event:%s\n", data);
}

int main(int argc, char *argv[]){
	
	GtkWidget *window,*toggle_button;
	char title[] = "Toggle_Button";

	// 初始化窗体
	gtk_init(&argc, &argv);
	// 创建窗体
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window),title);
	
	// 设置窗体的大小和位置
	gtk_widget_set_usize(window,300,250);
	gtk_widget_set_uposition(window,300,300);
	
	// 登记窗体delete_event信号的回调函数
	gtk_signal_connect(GTK_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
	
	// 创建触发按钮
	toggle_button = gtk_toggle_button_new_with_label("button");

	// 登记按钮enter信号的回调函数
	gtk_signal_connect(GTK_OBJECT(toggle_button),"enter",GTK_SIGNAL_FUNC(button_deal),"enter");
	// 登记按钮leave信号的回调函数
	gtk_signal_connect(GTK_OBJECT(toggle_button),"leave",GTK_SIGNAL_FUNC(button_deal),"leave");
	// 登记按钮pressed信号的回调函数
	gtk_signal_connect(GTK_OBJECT(toggle_button),"pressed",GTK_SIGNAL_FUNC(button_deal),"pressed");
	// 登记按钮released信号的回调函数
	gtk_signal_connect(GTK_OBJECT(toggle_button),"released",GTK_SIGNAL_FUNC(button_deal),"released");
	// 登记按钮clicked信号的回调函数
	gtk_signal_connect(GTK_OBJECT(toggle_button),"clicked",GTK_SIGNAL_FUNC(button_deal),"clicked");
	// 登记按钮toggle信号的回调函数
	gtk_signal_connect(GTK_OBJECT(toggle_button),"toggle",GTK_SIGNAL_FUNC(button_deal),"toggle");
	// 把按钮加入窗体
	gtk_container_add(GTK_CONTAINER(window),toggle_button);
		
	// 显示窗体和按钮
	gtk_widget_show(toggle_button);
	gtk_widget_show(window);

	gtk_main();

	return 0;
}
